<?php

class SqlInserirPadrao {

    public function Executa() {
        $retorno = array();
        $trataDados = new TrataDados();

        if ($trataDados->pegaDados()) {
            $tabelaModulo = $trataDados->getModuloTabela();
            $tabela = $trataDados->getTabela();

            $modulo = explode(".", $tabelaModulo);
            $tabelaEmPartes = explode("_", $tabela);
            $nomeClasse = str_replace(' ', '', ucwords($modulo[0] . ' ' . implode(" ", $tabelaEmPartes))) . 'Executa';
            try {
                $pdo = Conexao::open('sistema'); // inicia conexao
                $dados = $trataDados->getDados();
                if (class_exists($nomeClasse)) {

                    $classe = new $nomeClasse($pdo);

                    $classe->inserir($dados);
                    $retorno['resultado'] = 'sim';
                    $retorno['retorno'] = 'inserir';
                } else {
                    throw new Exception("Class {$nomeClasse} nao encontrada");
                }

                $pdo = null; // fecha conexao
            } catch (PDOException $e) {
                if ($e->getCode() == 23505){
                    $retorno['resultado']='erroUsuario';
                    $retorno['erro']='erroUsuario';
                } else {
                new Excecao($e);
                $retorno['resultado'] = 'erro';
                $retorno['erro'] = 'inserir';
                }
            } catch (Exception $e) {
                new Excecao($e);
                $retorno['resultado'] = 'erro';
                $retorno['erro'] = 'class_nao_definida';
            }
        } else {
            $retorno['resultado'] = 'dados_errados';
            $retorno['dados_errados'] = $trataDados->getErro();
        }
        return json_encode($retorno);
    }

    private function Executa1() {
        $retorno = array();
        $trataDados = new TrataDados();

        if ($trataDados->pegaDados()) {
            $tabelaModulo = $trataDados->getModuloTabela();
            $tabela = $trataDados->getTabela();

            $sql = new SqlInserir();
            $sql->setTabela($tabelaModulo); // define o nome da tabela
            foreach ($trataDados->getDados() as $campo => $valor) {
                $sql->setCampo($campo, $valor);
            }
            try {
                $pdo = Conexao::open('sistema'); // inicia conexao
                //echo $sql->getInstrucao();
                //exit();
                $pdo->exec($sql->getInstrucao()); // retorna a instrução SQL e a executa


                $sessao = new Sessao();
                // atribui valores para inserir historico
                $historico = new Historico();
                $historico->setIdUsuario($sessao->getValor("sessao_id_usuario"));
                $historico->setAcao("Inserir");
                $historico->setIdRegistro($pdo->lastInsertId("{$tabelaModulo}_id_{$tabela}_seq"));
                $historico->setNomeTabela($tabelaModulo);
                $historico->setSql($sql->getInstrucao());
                $historico->cadastraHistorico(); // inseri historico


                $pdo = null; // fecha conexao


                $retorno['resultado'] = 'sim';
            } catch (PDOException $e) {
                new Excecao($e);
                $retorno['resultado'] = 'erro';
                $retorno['erro'] = 'inserir';
            }
        } else {
            $retorno['resultado'] = 'dados_errados';
            $retorno['dados_errados'] = $trataDados->getErro();
        }
        return json_encode($retorno);
    }

}

?>